﻿#pragma once
#include "Common.h"
#include <vtkm/cont/CellSetExplicit.h>
#include "libmesh/mesh.h"
#include "libmesh/parallel_object.h"
#include "libmesh/communicator.h"

namespace libMesh
{
class MeshBase;
}

namespace poisson
{
class Mesh : public libMesh::Mesh
{
public:
  explicit Mesh(const libMesh::Parallel::Communicator& comm_in, unsigned char dim = 1)
    : libMesh::Mesh(comm_in, dim)
  {
  }

  Mesh(const Mesh&) = default;
  ~Mesh() = default;

  Mesh(Mesh&&) = delete;
  Mesh& operator=(const Mesh&) = delete;
  Mesh& operator=(Mesh&&) = default;

  void prepare_for_use();

  DataSet GetDataSet() { return _data_set; }

private:
  bool _prepared = false;
  DataSet _data_set;
};
}
